package bean;
import java.sql.SQLException;
import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.servlet.http.HttpServletRequest;

import org.richfaces.component.UISelect;

import DAO.ExameFisicoDAO;
import DAO.PacienteDAO;
import Model.ExameFisico;
import Model.Paciente;
import Model.Usuario;
import Utils.Uteis;

public class ExameFisicoBean
{
	private int id;
	private String fundoOlhos;	
	private boolean membroInfNormal;
	private boolean membroInfEdema;
	private boolean membroInfVarizes;
	private boolean ausenciaPulso;
	private boolean femurais;
	private boolean popliteos;
	private boolean tribalPosterior;
	private boolean dorsalisPedis;
	private int ulceras;
	private boolean aucPulmonarMv;	
	private boolean aucPulmonarRonco;
	private boolean aucPulmonarSibilo;
	private int sopro;

	private int aucCardiaca;
	private int foco;
	private Date dataExame;
	private int idUsuario;

	private int idPaciente;	
	private UISelect idPacienteValidation;
	
	public UISelect getIdPacienteValidation() {
		return idPacienteValidation;
	}
	public void setIdPacienteValidation(UISelect idPacienteValidation) {
		this.idPacienteValidation = idPacienteValidation;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getFundoOlhos() {
		return fundoOlhos;
	}
	public void setFundoOlhos(String fundoOlhos) {
		this.fundoOlhos = fundoOlhos;
	}
	public int getIdUsuario() {
		return idUsuario;
	}
	public void setIdUsuario(int idUsuario) {
		this.idUsuario = idUsuario;
	}
	public int getIdPaciente() {
		return idPaciente;
	}
	public void setIdPaciente(int idPaciente) {
		this.idPaciente = idPaciente;
	}
	public boolean isMembroInfNormal() {
		return membroInfNormal;
	}
	public void setMembroInfNormal(boolean membroInfNormal) {
		this.membroInfNormal = membroInfNormal;
	}
	public boolean isMembroInfEdema() {
		return membroInfEdema;
	}
	public void setMembroInfEdema(boolean membroInfEdema) {
		this.membroInfEdema = membroInfEdema;
	}
	public boolean isMembroInfVarizes() {
		return membroInfVarizes;
	}
	public void setMembroInfVarizes(boolean membroInfVarizes) {
		this.membroInfVarizes = membroInfVarizes;
	}
	public boolean isAusenciaPulso() {
		return ausenciaPulso;
	}
	public void setAusenciaPulso(boolean ausenciaPulso) {
		this.ausenciaPulso = ausenciaPulso;
	}
	public boolean isFemurais() {
		return femurais;
	}
	public void setFemurais(boolean femurais) {
		this.femurais = femurais;
	}
	public boolean isPopliteos() {
		return popliteos;
	}
	public void setPopliteos(boolean popliteos) {
		this.popliteos = popliteos;
	}
	public boolean isTribalPosterior() {
		return tribalPosterior;
	}
	public void setTribalPosterior(boolean tribalPosterior) {
		this.tribalPosterior = tribalPosterior;
	}
	public boolean isDorsalisPedis() {
		return dorsalisPedis;
	}
	public void setDorsalisPedis(boolean dorsalisPedis) {
		this.dorsalisPedis = dorsalisPedis;
	}
	public boolean isAucPulmonarMv() {
		return aucPulmonarMv;
	}
	public void setAucPulmonarMv(boolean aucPulmonarMv) {
		this.aucPulmonarMv = aucPulmonarMv;
	}
	public boolean isAucPulmonarRonco() {
		return aucPulmonarRonco;
	}
	public void setAucPulmonarRonco(boolean aucPulmonarRonco) {
		this.aucPulmonarRonco = aucPulmonarRonco;
	}
	public boolean isAucPulmonarSibilo() {
		return aucPulmonarSibilo;
	}
	public void setAucPulmonarSibilo(boolean aucPulmonarSibilo) {
		this.aucPulmonarSibilo = aucPulmonarSibilo;
	}	
	public Date getDataExame() {
		return dataExame;
	}
	public void setDataExame(Date dataExame) {
		this.dataExame = dataExame;
	}

	public int getAucCardiaca() {
		return aucCardiaca;
	}
	public void setAucCardiaca(int aucCardiaca) {
		this.aucCardiaca = aucCardiaca;
	}
	
	public int getSopro() {
		return sopro;
	}
	public void setSopro(int sopro) {
		this.sopro = sopro;
	}
	public int getFoco() {
		return foco;
	}
	public void setFoco(int foco) {
		this.foco = foco;
	}
	public int getUlceras() {
		return ulceras;
	}
	public void setUlceras(int ulceras) {
		this.ulceras = ulceras;
	}
	public String Salvar()
	{
		ExameFisico exFisico = new ExameFisico();		
		try
		{			
		    Usuario objUsuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser"); 
			
			exFisico.setFundoOlhos(Integer.parseInt(this.fundoOlhos));
			exFisico.setMembroInfNormal(this.membroInfNormal ? 1: 0);
			exFisico.setMembroInfEdema(this.membroInfEdema ? 1 : 0);
			exFisico.setMembroInfVarizes(this.membroInfVarizes ? 1 : 0);
			exFisico.setAusenciaPulso(this.ausenciaPulso ? 1 : 0);
			exFisico.setFemurais(this.femurais ? 1 : 0);
			exFisico.setPopliteos(this.popliteos ? 1 : 0);
			exFisico.setTribalPosterior(this.tribalPosterior ? 1 : 0);
			exFisico.setDorsalisPedis(this.dorsalisPedis ? 1 : 0);
			exFisico.setUlceras(this.ulceras);
			exFisico.setAucPulmonarMv(this.aucPulmonarMv ? 1 : 0);	
			exFisico.setAucPulmonarRonco(this.aucPulmonarRonco ? 1 : 0);
			exFisico.setAucPulmonarSibilo(this.aucPulmonarSibilo ? 1 : 0);
			exFisico.setSopro(this.sopro);
			exFisico.setAucCardiaca(this.aucCardiaca);
			exFisico.setFoco(this.foco);
			exFisico.setDataExame(Uteis.javaDate2SqlDate(this.dataExame));			
			exFisico.setIdPaciente(this.idPaciente);
			exFisico.setIdUsuario(objUsuario.getIdUsuario());
			
			if(this.id > 0)
			{
				exFisico.setId(this.id);
				ExameFisicoDAO.Update(exFisico);
			}
			else
				ExameFisicoDAO.Insert(exFisico);
			
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações Salvas com sucesso"));
			
		}		
		catch(Exception ex)
		{
			ex.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao salvar as informações, contate o administrador do sistema"));
		}		
		return "examefisico_list";
	}
	
	public String Editar()
	{
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();		
		int id =  Integer.parseInt(request.getParameter("idexamefisico"));
		ExameFisico exFisico = null;
		
		try
		{
			exFisico = ExameFisicoDAO.LoadObjet(id);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
		
		if(exFisico != null)
		{
			this.setId(exFisico.getId());
			this.setFundoOlhos(String.valueOf(exFisico.getFundoOlhos()));
			this.setMembroInfNormal(Uteis.parseInt2Boolean(exFisico.getMembroInfNormal()));
			this.setMembroInfEdema(Uteis.parseInt2Boolean(exFisico.getMembroInfEdema()));
			this.setMembroInfVarizes(Uteis.parseInt2Boolean(exFisico.getMembroInfVarizes()));
			this.setAusenciaPulso(Uteis.parseInt2Boolean(exFisico.getAusenciaPulso()));
			this.setFemurais(Uteis.parseInt2Boolean(exFisico.getFemurais()));
			this.setPopliteos(Uteis.parseInt2Boolean(exFisico.getPopliteos()));
			this.setTribalPosterior(Uteis.parseInt2Boolean(exFisico.getTribalPosterior()));
			this.setDorsalisPedis(Uteis.parseInt2Boolean(exFisico.getDorsalisPedis()));
			this.setUlceras(exFisico.getUlceras());
			this.setAucPulmonarMv(Uteis.parseInt2Boolean(exFisico.getAucPulmonarMv()));	
			this.setAucPulmonarRonco(Uteis.parseInt2Boolean(exFisico.getAucPulmonarRonco()));
			this.setAucPulmonarSibilo(Uteis.parseInt2Boolean(exFisico.getAucPulmonarSibilo()));
			this.setSopro(exFisico.getSopro());
			this.setAucCardiaca(exFisico.getAucCardiaca());
			this.setFoco(exFisico.getFoco());
			this.setDataExame(exFisico.getDataExame());
			this.setIdUsuario(exFisico.getIdUsuario());
			this.setIdPaciente(exFisico.getIdPaciente());
			
			return "examefisico_edit";
		}
		else
		{
			return "examefisico_list";
		}		
	}
	

	public void validateData(FacesContext context, UIComponent uicomponent, Object value)
	{
		Date dataSel = (Date) value;
		
		try {
			if(dataSel.after(new Date()))
			{
				((UIInput)uicomponent).setValid(false);
				FacesMessage message = new FacesMessage();
				message.setDetail("A data não pode estar no futuro!");        	
				message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
				throw new ValidatorException(message);
			}	
			else
			{
				Object idPacienteSelect = this.idPacienteValidation.getLocalValue();	
				if(idPacienteSelect != null)
				{
					int idPacienteSel = Integer.parseInt(this.idPacienteValidation.getLocalValue().toString());
					Paciente paciente = PacienteDAO.LoadObject(idPacienteSel);
					if(dataSel.before(paciente.getDataNascimento()))
					{
						String data = Uteis.formatarData(paciente.getDataNascimento());
						((UIInput)uicomponent).setValid(false);
						FacesMessage message = new FacesMessage();					
						message.setDetail("A data não pode ser menor que "+ data +" que é data de nascimento do paciente! ");
						message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
						throw new ValidatorException(message);
					}						
				}
				else
				{
					((UIInput)uicomponent).setValid(false);
				}
			}			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
}